using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace FiltronASP.Models.DAO.Interfaces
{
    /// <summary>
    /// Interfejs dla operacji bazodanowych specyficznych dla tabeli <code>pages_types_acceptable_templates</code>.
    /// </summary>
    public interface IPageTypeAcceptableTemplateDAO : IGenericDAO<PageTypeAcceptableTemplate, System.Nullable<int>>
    {
        /// <summary>
        /// Pobieranie listy obiektów na podstawie typu strony.
        /// </summary>
        /// <param name="pageTypeId">typ strony</param>
        /// <returns>Lista rekordów o zadanym typie strony</returns>
        IQueryable<PageTypeAcceptableTemplate> FindByPage(int pageTypeId);

        /// <summary>
        /// Pobieranie listy obiektów na podstawie typu strony i szablonu.
        /// </summary>
        /// <param name="pageTypeId">typ strony</param>
        /// <param name="templateId">szablon</param>
        /// <returns>Lista rekordów o zadanym typie strony i szablonie</returns>
        IQueryable<PageTypeAcceptableTemplate> FindByPageAndTemplate(int pageTypeId, int templateId);

        /// <summary>
        /// Pobieranie listy obiektów na podstawie typu strony, języka i ścieżki szablonu.
        /// </summary>
        /// <param name="pageTypeId">typ strony</param>
        /// <param name="languageId">język</param>
        /// <param name="templatePath">ścieżka szablonu</param>
        /// <returns>Lista rekordów o zadanym typie strony, języku i szablonie</returns>
        IQueryable<PageTypeAcceptableTemplate> FindByPageAndLanguageAndTemplate(int languageId, int pageTypeId, string templatePath);

         /// <summary>
        /// Pobieranie listy obiektów na podstawie języka.
        /// </summary>
        /// <param name="languageId">język</param>
        /// <returns>Lista rekordów o zadanym języku</returns>
        IQueryable<PageTypeAcceptableTemplate> FindByLanguage(int languageId);

        /// <summary>
        /// Wstawianie listy obiektów na podstawie jezyka.
        /// </summary>
        /// <param name="defaultLanguageId">domyslny jezyk</param>
        /// <param name="newLanguageId">nowy jezyk</param>
        /// <returns>true jesli sie udalo, false wpp</returns>
        bool InsertForNewLanguage(int defaultLanguageId, int newLanguageId);


        /// <summary>
        /// Usuwanie obiektów na podstawie typu strony.
        /// </summary>
        /// <param name="pageTypeId">typ strony</param>
        /// <returns>true w przypadku usunięcia, false w przypadku nie odnalezienia rekordów</returns>
        bool DeleteByPageType(int pageTypeId);

        /// <summary>
        /// Usuwanie obiektow po jezyku.
        /// </summary>
        /// <param name="languageId">jezyk</param>
        /// <returns>true dla sukcesu, false w przeciwnym razie</returns>
        bool DeleteByLanguage(int languageId);
    }
}
